package cn.e4j.modular.erp.service.impl;

import cn.e4j.core.dto.Dtos;
import cn.e4j.core.dto.impl.Dto;
import cn.e4j.core.shiro.ShiroKit;
import cn.e4j.core.shiro.ShiroUser;
import cn.e4j.core.util.DateUtils;
import cn.e4j.core.util.LangUtils;
import cn.e4j.core.util.StringUtils;
import cn.e4j.modular.crm.entity.*;
import cn.e4j.modular.crm.service.impl.*;
import cn.e4j.modular.erp.mapper.GPMapper;
import cn.e4j.modular.erp.service.Erp;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*;

/**
 * GP逻辑处理
 * Created by ganjia on 2019-09-18.
 */
@Service
public class GPServiceImpl extends ServiceImpl<GPMapper, GwamT> implements Erp {
    @Autowired
    GwcsTServiceImpl gwcsTService;

    @Autowired
    GwakTServiceImpl gwakTService;

    @Autowired
    MmrxTServiceImpl mmrxTService;

    @Autowired
    GwdfTServiceImpl gwdfTService;

    @Autowired
    private MmrwTServiceImpl mmrwTService;

    @Transactional(readOnly = true)
    public List<Dto> getSiteList(Page<Object> page, Dto dto) {
        return this.baseMapper.getSiteList(page, dto);
    }

    /**
     * 获取营运中心名称
     * @param dto
     * @return
     */
    @Transactional(readOnly = true)
    public Dto getAzpFile(Dto dto) {
        return this.baseMapper.getAzpFile(dto);
    }

    /**
     * 根据客户编号获取默认联系人、地址、物流信息
     * @param inDto
     * @return
     */
    @Transactional(readOnly = true)
    public Dto getOcc(Dto inDto) {
        Dto resultDto=this.baseMapper.getOcc(inDto);
        Dto outDto = Dtos.newDto();
        if(resultDto != null){
            outDto.put("GWEC107",resultDto.getString("ADDRESS"));//地址
            outDto.put("GWEC106",resultDto.getString("OCC29"));//业务联系人
            outDto.put("GWEC108","");//物流信息
        }else{
            outDto.put("GWEC107","");
            outDto.put("GWEC106","");
            outDto.put("GWEC108","");
        }
        return outDto;
    }

    /**
     * 根据语言别获取公司名称
     * @param inDto
     * @return
     */
    @Transactional(readOnly = true)
    public Dto getZo(Dto inDto) {
        Dto resultDto = this.baseMapper.getZo(inDto);
        return resultDto;
    }


    /**
     * 客户资料同步
     */
    public String SyncERP(String gwak001,String ERP_Link,String dbname) {
        ShiroUser shiroUser = ShiroKit.getUser();

        //获取gwak001对应的客户资料数据
        Dto qDto = Dtos.newDto();
        qDto.put("ent", shiroUser.getDBC());
        qDto.put("lang", LangUtils.getLang(shiroUser.getLANG()));
        qDto.put("gwak001", gwak001);
        Dto info = this.gwakTService.getGwakData(qDto);

        //获取目标数据库
        Dto outDto = Dtos.newDto();
        outDto.put("PLANT", info.getString("GWAKPLANT"));
        outDto.put("OCC01", info.getString("GWAK001"));  // 客户编号
        outDto.put("OCC02", info.getString("GWAKL003")); // 客户简称
        outDto.put("OCC18", info.getString("GWAKL004")); // 公司全名
        outDto.put("OCC28", info.getString("GWAK050"));  // 负责人
        outDto.put("OCC29", info.getString("GWAK031"));  // 业务联络人
        outDto.put("OCC261", info.getString("GWAK030")); //电话1
        //outDto.put("MA007", info.getString("GWAK050"));//电话2
        //outDto.put("MA010", info.getString("GWAK007"));
        if (info.getString("GWAK051").equals("NULL")) { // 注册资金
            outDto.put("OCC13", "");
        } else {
            outDto.put("OCC13", info.getBigDecimal("GWAK051"));
        }
        if (info.getString("GWAK052").equals("NULL")) {  // 年营业额
            outDto.put("OCC14", "");
        } else {
            outDto.put("OCC14", info.getBigDecimal("GWAK052"));
        }
        outDto.put("OCC42", info.getString("GWAK008"));  // 币别
        outDto.put("OCC20", info.getString("GWAK020"));  // 区域（洲）
        outDto.put("OCC21", info.getString("GWAK021"));  // 国别
        outDto.put("OCC22", info.getString("GWAK024"));  // 地区（如北京）
        outDto.put("OCC1009", info.getString("GWAK023"));  // 省
        outDto.put("OCC1010", info.getString("GWAK024"));  // 市
        outDto.put("OCC1011", info.getString("GWAK025"));  // 县

        outDto.put("OCC1012", info.getString("GWAK028"));  // 注册地址

        if (!(info.getString("GWAL018_fp").isEmpty())) {
            outDto.put("OCC231", info.getString("GWAL018_fp"));//gwal018 where gwal003='I' 发票地址
        }
        if (!(info.getString("GWAL018_sh").isEmpty())) {
            outDto.put("OCC241", info.getString("GWAL018_sh"));//gwal018 where gwal003='D' 送货地址
        }
//        outDto.put("MA031", info.getString("GWAK060_NAME"));  // 付款条件
        outDto.put("OCC62", "N"); // 信用额度控制
        outDto.put("OCC63", 0);   // 信用额度
        outDto.put("OCC64", 0);   // 信用额度容许超出比率
        outDto.put("OCC44", "2"); // 计价方式
        outDto.put("OCC1028", 0);   // 折扣率
        outDto.put("OCC08", "A"); // 发票种类 (发票别？)
        //outDto.put("MA038", info.getString("GWAK012"));//税种
        outDto.put("OCC41", "1"); //税种
//        outDto.put("MA039", "1"); // 单据发送方式
//        outDto.put("MA041", "2"); // 结算方式
//        outDto.put("MA042", "1"); // 票据寄领
//        outDto.put("MA044", 0);  // 预计收款日
//        outDto.put("MA045", 0);  // 资金实现日
//        outDto.put("MA047", "112201"); //账款科目
        //outDto.put("MA048", "1");
        outDto.put("OCC53", 0);  // 佣金比率
//        outDto.put("MA060", 0);  // 其它比率
//        outDto.put("MA061", 0);  // 保险费率
//        outDto.put("MA062", ""); // 文件地址
//        outDto.put("MA066", "N"); // 总公司付款
//        outDto.put("MA067", 0);  // 分店数
//        outDto.put("MA074", "1121"); // 票据科目
//        outDto.put("MA075", "86");  // 定价顺序
//        outDto.put("MA082", "N");   // 信用额度由总公司控制 Y/N
//        outDto.put("MA083", info.getString("GWAK060")); //付款条件
//        outDto.put("MA084", "N");  // 发票号码由总公司控制
//        outDto.put("MA086", "N");  // 预留字段
        outDto.put("MA087", "2");  // 税额
//        outDto.put("MA088", "1");  // 订单信用检查方式
//        outDto.put("MA089", "1");  // 销货信用检查方式
//        outDto.put("MA090", 1);    // LC收状金额比率
//        outDto.put("MA091", 1);    // 未兑现应收票据比率
//        outDto.put("MA092", 1);    // 应收账款比率
//        outDto.put("MA093", 1);    // 未开票销货金额比率
//        outDto.put("MA094", 1);    // 未出货订单金额比率
        outDto.put("OCC246"," ");
        outDto.put("OCCPOS","1");
        outDto.put("OCC73"," ");
        outDto.put("OCC71","1");
        outDto.put("OCC72", 0);    // 订金比率
//        outDto.put("MA096", "1");  // 开票方法
//        outDto.put("MA097", "1");  // 核准状况

        //抓税率
        if (info.getString("GWEA006") == null || info.getString("GWAK004").isEmpty()) {
            outDto.put("MA101", 0.16);
        } else {
            outDto.put("MA101", info.getBigDecimal("GWEA006"));
        }


        Dto orgDto = this.gwcsTService.getSysOrg(shiroUser.getORG_ID());
//        outDto.put("MA103", "1");      //出货通知信用检查方式
//        outDto.put("MA104", 0);        //未销货出货通知金额比率
//        outDto.put("MA105", "220301"); //预收账款科目
//        outDto.put("MA106", "N");      //汇至EBC
//        outDto.put("MA109", 0); // 预留字段
//        outDto.put("MA110", 0); // 预留字段
//        outDto.put("MA111", 0); // 预留字段
//        outDto.put("MA113", "N");  //EBC汇出码
        //outDto.put("UDF01", info.getString("GWAK004"));
        outDto.put("COMPANY", info.getString("GWAKPLANT"));
        outDto.put("FLAG", 1);

        //暂时直接写入Y
        //String result = "Y";
        String result = "N";
        //将客户资料插入指定ERP数据库
        outDto.put("ERP_Link",ERP_Link);
        outDto.put("PLANT",dbname);
        int i = this.baseMapper.insertOccFile(outDto);
        if (i > 0) {
            result = "Y";
        }
        return result;
    }

    /**
     * 维修费用收入转ERP订单(gwei025)
     * @param inDto
     * @return
     */
    public JSONArray transfer025(Dto inDto) {

        ShiroUser shiroUser = ShiroKit.getUser();
        // 获取前台多选的维修费用收入ID
        String[] selectionIds = inDto.getString("datas").split(",");
        List list = Arrays.asList(selectionIds);
        // 对ID进行去重
        Set set = new HashSet(list);
        String[] rid = (String[]) set.toArray(new String[0]); // 这里加 new String[0] 是为了能够强转String[]

        // 最后返回的JSON数据
        JSONArray json = new JSONArray();

        for (String data : rid) {

            inDto.put("MMRXDOCNO", data);
            //根据单号查询维修收入结算表数据
            List<Dto> mmrx_tPOs = this.mmrxTService.getMmrxAllData(inDto);
            String dbname = mmrx_tPOs.get(0).getString("MMRXPLANT");

            if (dbname.isEmpty()) { //没查到目标数据库  添加失败
                JSONObject jo = new JSONObject();
                jo.put("ERPRESULT", "N");//同步结果  Y  N
                jo.put("GWAK001", mmrx_tPOs.get(0).getString("MMRX018"));//客户编号
                jo.put("GWAKL003",  mmrx_tPOs.get(0).getString("MMRX018_NAME"));//客户名称
                jo.put("MMRXDOCNO",  mmrx_tPOs.get(0).getString("MMRXDOCNO"));//订单号
                json.add(jo);
                continue;
            }

            // 基本的Dto ，包含ERP主机和数据库名称
            Dto baseDto = Dtos.newDto();
            baseDto.put("ERP_Link",inDto.getString("ERP_Link"));
            baseDto.put("PLANT", dbname);

            //（根据客户订单号）判断订单是否已经抛过  都是整单抛转 不需要项次
            Dto inDto3 = Dtos.newDto();
            inDto3.putAll(baseDto);
            inDto3.put("OEA12", mmrx_tPOs.get(0).getString("MMRXDOCNO"));
            Dto checkinfo = this.baseMapper.getOea12(inDto3);
            if(checkinfo != null && checkinfo.getString("OEA12") != null) {
                JSONObject jo = new JSONObject();
                jo.put("ERPRESULT", "N");//同步结果  Y  N
                jo.put("GWAK001", mmrx_tPOs.get(0).getString("MMRX018"));//客户编号
                jo.put("GWAKL003",  mmrx_tPOs.get(0).getString("MMRX018_NAME"));//客户名称
                jo.put("MMRXDOCNO",  mmrx_tPOs.get(0).getString("MMRXDOCNO"));//订单号
                json.add(jo);
                //该订单已经抛转过  同步失败  跳过进行下个订单
                continue;
            }

            //判断客户编号在ERP中是否存在 不存在就新增一笔客户数据
            Dto inDto2 = Dtos.newDto();
            inDto2.putAll(baseDto);
            inDto2.put("GWAK001", mmrx_tPOs.get(0).getString("MMRX018"));

            Dto outDto2 = this.baseMapper.selectByGwak001(inDto2);
            if (outDto2 == null || outDto2.getString("OCC01").isEmpty()) {
                String syncresult = this.SyncERP(mmrx_tPOs.get(0).getString("MMRX018"), inDto.getString("ERP_Link"),dbname);
                if (!syncresult.equals("Y")) {
                    JSONObject jo = new JSONObject();
                    jo.put("ERPRESULT", "N");//同步结果  Y  N
                    jo.put("GWAK001", mmrx_tPOs.get(0).getString("MMRX018"));//客户编号
                    jo.put("GWAKL003",  mmrx_tPOs.get(0).getString("MMRX018_NAME"));//客户名称
                    jo.put("MMRXDOCNO",  mmrx_tPOs.get(0).getString("MMRXDOCNO"));//订单号
                    json.add(jo);
                    //同步客户资料失败  整张订单跳过 进行下个订单
                    continue;
                }
            }

            // 获取单别
            Dto dhinfo = this.mmrxTService.getGwaz(mmrx_tPOs.get(0).getString("MMRXLEGAL"));
            String pre = dhinfo.getString("GWAZ002") + "-";

            // 获取单号
            Date date = new Date();
            Dto tcDto = Dtos.newDto();
            tcDto.putAll(baseDto);
            tcDto.put("OEA01", DateUtils.formatDate(date, DateUtils.PATTERN_yyyyMMdd));
            String dd01 = this.baseMapper.getMaxOea01(tcDto);
            if (dd01 == null) {
                dd01 = pre + DateUtils.formatDate(date, DateUtils.PATTERN_yyyyMMdd) + "001";
            }else {
                dd01 = pre + dd01;
            }

            String OEB01 = "";
            Dto infoDto = Dtos.newDto();
            infoDto.putAll(baseDto);
            infoDto.put("dd01",dd01);
            infoDto.put("ENT",inDto.getString("ENT"));

            // 新增单身
            try {
                this.insertOebBy025(mmrx_tPOs,infoDto);
            } catch (Exception e) {
                JSONObject jo = new JSONObject();
                jo.put("ERPRESULT", "N");//同步结果  Y  N
                jo.put("GWAK001", mmrx_tPOs.get(0).getString("MMRX018"));//客户编号
                jo.put("GWAKL003",  mmrx_tPOs.get(0).getString("MMRX018_NAME"));//客户名称
                jo.put("MMRXDOCNO",  mmrx_tPOs.get(0).getString("MMRXDOCNO"));//订单号
                json.add(jo);

                inDto.put("PLANT", dbname);
                inDto.put("OEB01", OEB01);
                this.baseMapper.deleteOeb(inDto);

                MmrxT mmrxT = new MmrxT();
                mmrxT.setMMRX029("");
                mmrxT.setMMRXACTI("Y");
                UpdateWrapper<MmrxT> mmrxTUpdateWrapper = new UpdateWrapper<>();
                mmrxTUpdateWrapper.eq("MMRXDOCNO", mmrx_tPOs.get(0).getString("MMRXDOCNO"));
                mmrxT.update(mmrxTUpdateWrapper);

                //插入 OEB 失败  整张订单跳过 进行下个订单
                e.printStackTrace();
                continue;
            }

            // 新增单头
            try {
                this.insertOeaBy025(mmrx_tPOs.get(0),infoDto,json);
            } catch (Exception e) {
                JSONObject jo = new JSONObject();
                jo.put("ERPRESULT", "N");//同步结果  Y  N
                jo.put("GWAK001", mmrx_tPOs.get(0).getString("MMRX018"));//客户编号
                jo.put("GWAKL003",  mmrx_tPOs.get(0).getString("MMRX018_NAME"));//客户名称
                jo.put("MMRXDOCNO",  mmrx_tPOs.get(0).getString("MMRXDOCNO"));//订单号
                json.add(jo);

                inDto.put("PLANT", dbname);
                inDto.put("OEA01", dd01);
                this.baseMapper.deleteOea(inDto);

                MmrxT mmrxT = new MmrxT();
                mmrxT.setMMRX029("");
                mmrxT.setMMRXACTI("Y");
                UpdateWrapper<MmrxT> mmrxTUpdateWrapper = new UpdateWrapper<>();
                mmrxTUpdateWrapper.eq("MMRXDOCNO", data);
                mmrxT.update(mmrxTUpdateWrapper);

                //插入COPTD 失败  整张订单跳过 进行下个订单
                e.printStackTrace();
                continue;
            }
        }
        return json;
    }


    /**
     * 维修费用收入转ERP ： 插入订单单头(gwei025)
     */
    public void insertOeaBy025(Dto mmrx_tPO,Dto infoDto,JSONArray json) {

        //单头  订单信息
        Dto pDto = Dtos.newDto();

        pDto.put("ERP_Link", infoDto.getString("ERP_Link"));
        pDto.put("PLANT", infoDto.getString("PLANT"));//目标数据库
        //按法人组织抓取单号
//                Dto dhinfo = this.mmrxTService.getGwaz(mmrx_tPO.getString("MMRXLEGAL"));
//                pDto.put("TC001", dhinfo.getString("GWAZ002"));
        pDto.put("OEA00",1); // 类别：正常订单
        pDto.put("OEA01", infoDto.getString("dd01"));
        pDto.put("OEA02", DateUtils.getDate("yyyyMMdd")); // 当前日期
        pDto.put("OEA03", mmrx_tPO.getString("MMRX018")); // 账款客户编号
        pDto.put("OEA032", mmrx_tPO.getString("MMRX018_NAME")); // 客户简称
        pDto.put("OEA04", mmrx_tPO.getString("MMRX018")); // 送货客户编号
        pDto.put("OEA17", mmrx_tPO.getString("MMRX018")); // 收款客户编号
        pDto.put("OEA17_ds", mmrx_tPO.getString("MMRX018_NAME")); // 收款客户简称
        pDto.put("OEA12", mmrx_tPO.getString("MMRXDOCNO"));

        pDto.put("OEA14", mmrx_tPO.getString("MMRX022_ERP")); // 业务人员
        pDto.put("OEA15", mmrx_tPO.getString("MMRX032_ERP")); // 部门编号
        pDto.put("OEA23", mmrx_tPO.getString("MMRX006")); // 交易币种
        pDto.put("OEA21", mmrx_tPO.getString("MMRX007"));// 税种
        pDto.put("OEA24", mmrx_tPO.getString("MMRX009")); // 汇率
        pDto.put("OEA213", "N"); // 含税否
        pDto.put("OEA31", mmrx_tPO.getString("GWAK015"));  // 价格条件
        pDto.put("OEA32", mmrx_tPO.getString("GWAK060"));  // 收款条件
        pDto.put("OEA45", mmrx_tPO.getString("MMRX022")); // 联系人
        pDto.put("OEAUD02", mmrx_tPO.getString("MMRX022"));  // 联系人

        if(mmrx_tPO.getString("MMRX025").split(";").length > 0){ // 送货地址
            pDto.put("OEA044", mmrx_tPO.getString("MMRX025").split(";")[0]);
        }
        pDto.put("OEA09",0);
        pDto.put("OEA43", "1001"); // 运输方式
        pDto.put("OEA34", 0); // 佣金比率
        pDto.put("OEA61", 0); // 订单总未税金额
        pDto.put("OEA62", 0); // 已出货未税金额
        pDto.put("OEA63", 0); // 被结案未税金额
        pDto.put("OEA85", " "); // 结算方式
        pDto.put("OEACONF", "N"); // 审核码
        pDto.put("OEA11", "M");//订单来源
        pDto.put("OEA05", "1");//发票别
        pDto.put("OEA06", 0);//修改版本
        pDto.put("OEA08", 1);//订单性质
        pDto.put("OEA49", 0);//状况码
        pDto.put("OEALEGAL", mmrx_tPO.getString("MMRXPLANT"));  // 所属法人
        pDto.put("OEAPLANT", mmrx_tPO.getString("MMRXPLANT"));   // 所属营运中心

        mmrx_tPO.put("ENT",infoDto.getString("ENT"));
        Dto sumData = this.mmrxTService.getSumData(mmrx_tPO);
        pDto.put("OEA61", sumData.getBigDecimal("MMRX014_SUM"));//sum（gwcs036-gwcs040） 订单金额
        if (mmrx_tPO.getBigDecimal("GWEA006") == null || mmrx_tPO.getBigDecimal("GWEA006").equals(new BigDecimal(0.00))) {
            pDto.put("OEA211", 16);
        } else {
            pDto.put("OEA211", mmrx_tPO.getBigDecimal("GWEA006"));//根据税种gwcs032抓税率
        }

        pDto.put("OEA161", 1); // 订金比率
        pDto.put("TC046", 0); // 总包装数量
        pDto.put("OEA59", DateUtils.getDate("yyyyMMdd")); // 交货日期

//                pDto.put("TC030", sumData.getBigDecimal("MMRX016_SUM"));//sum（gwcs040）订单税额
//                pDto.put("TC031", sumData.getBigDecimal("MMRX003_SUM"));//sum（gwcs003）总数量
//                pDto.put("TC039", DateUtils.getDate("yyyyMMdd")); // 单据日期
//                pDto.put("TC011", mmrx_tPO.getString("MMRX020")+ mmrx_tPO.getString("MMRX021")); // 联系人 + 联系手机
//                pDto.put("TC015", mmrx_tPO.getString("MMRX031"));// 备注
        //发票信息
//                if(mmrx_tPO.getString("MMRX026").split(";").length > 0){
//                    pDto.put("TC052", mmrx_tPO.getString("MMRX026").split(";")[0]);
//                    pDto.put("TC053", mmrx_tPO.getString("MMRX026").split(";")[1] + " " + mmrx_tPO.getString("MMRX026").split(";")[2]);
//                }
//                pDto.put("TC054", mmrx_tPO.getString("MMRX018_NAME"));//客户名称
//                pDto.put("TC058", 0);
//                pDto.put("TC059", "N");
//                pDto.put("TC065", mmrx_tPO.getString("MMRXDOCNO"));
//                pDto.put("TC066", "0");
//                pDto.put("TC067", "2");
//                pDto.put("TC068", 0);
//                pDto.put("TC069", 0);
//                pDto.put("TC070", "N");
//                pDto.put("TC071", "0");
//                pDto.put("TC073", mmrx_tPO.getString("GWAK007"));//按经销商mmrx019去客户档gwak抓税号gwak007
//                pDto.put("TC074", mmrx_tPO.getString("MMRX021"));
//                pDto.put("TCI01", DateUtils.getDate("yyyyMMdd"));
//                pDto.put("TCI02", DateUtils.getDate("yyyyMMdd"));
//                pDto.put("TCI03", sumData.getBigDecimal("MMRX014_SUM").subtract(sumData.getBigDecimal("MMRX016_SUM")));//sum(gwcs039-gwcs041)
//                pDto.put("TCI04", sumData.getBigDecimal("MMRX016_SUM"));//sum(gwcs041)
//
//                pDto.put("UDF12", "返利");
        int row = this.baseMapper.insertOeaFile(pDto);

        String result = "N";
        if (row > 0) {
            result = "Y";
        }
        JSONObject jo = new JSONObject();
        jo.put("ERPRESULT", result);//同步结果  Y  N
        jo.put("GWAK001", mmrx_tPO.getString("MMRX018"));//客户编号
        jo.put("GWAKL003",  mmrx_tPO.getString("MMRX018_NAME"));//客户名称
        jo.put("MMRXDOCNO",  mmrx_tPO.getString("MMRXDOCNO"));//订单号
        json.add(jo);
    }


    /**
     * 维修费用收入转ERP ： 插入订单单身(gwei025)
     */
    public void insertOebBy025(List<Dto> mmrx_tPOs,Dto infoDto) {
        int count = 1;
        for (Dto mmrx_tPO : mmrx_tPOs) {
            //单身信息
            Dto qDto = Dtos.newDto();
            qDto.put("ERP_Link", infoDto.getString("ERP_Link"));
            qDto.put("PLANT", infoDto.getString("PLANT"));//目标数据库
            //按法人组织抓取单号
//                    Dto dhinfo = this.mmrxTService.getGwaz(mmrx_tPO.getString("MMRXLEGAL"));
//                    qDto.put("TB001", dhinfo.getString("GWAZ002"));
//                    TD001 = dhinfo.getString("GWAZ002");
            DecimalFormat mFormat = new DecimalFormat("0000");//确定格式，把1 转换为0001
            String mmrxseq = mFormat.format(mmrx_tPO.getBigDecimal("MMRXSEQ"));
            qDto.put("OEB01", infoDto.getString("dd01"));
            qDto.put("OEB03", mmrxseq);
            qDto.put("OEB04", mmrx_tPO.getString("MMRX001"));//取CRM中购物车的品号(需要判断是否在ERP中是否存在?）
            qDto.put("OEB05_FAC", 0); // 销售/库存单位换算率
            qDto.put("OEB06", mmrx_tPO.getString("GWAML003") + " " + mmrx_tPO.getString("GWAML004")); // 品名/规格
            qDto.put("OEB09", mmrx_tPO.getString("GWAM019"));  // 仓库
            qDto.put("OEB12", mmrx_tPO.getString("MMRX003"));  // 订单数量
            qDto.put("OEB24", 0);  // 已出货数量
            qDto.put("OEB910", mmrx_tPO.getString("MMRX002"));  // 单位
            qDto.put("OEB13", mmrx_tPO.getString("MMRX012"));   // 单价（使用的是本币单价）
            qDto.put("OEB16", "");  // 预交货日
            qDto.put("OEB70", "N"); // 结束
            qDto.put("OEB23", 0);  // 库存数量 （待出货数量）
            qDto.put("OEB25", 0);  // 已销退数量
            qDto.put("OEB26", 0);  // 被结案数量
            qDto.put("OEB37", 0);  // 基础单价
            qDto.put("OEB44", " ");  // 经营方式
            qDto.put("OEB47", "0");  // 分摊折价
            qDto.put("OEB48", "1");  // 出货方式 1.订货 2.现货
            qDto.put("OEBLEGAL", mmrx_tPO.getString("MMRXPLANT"));  // 所属法人
            qDto.put("OEBPLANT", mmrx_tPO.getString("MMRXPLANT"));   // 所属营运中心
            qDto.put("OEB1006", 1);  // 折扣率
            qDto.put("OEB932", 0); // 订单包装数量
            qDto.put("OEB901", 0);  // 已交包装数量
            // 税率
            if (mmrx_tPO.getBigDecimal("GWEA006") == null || mmrx_tPO.getBigDecimal("GWEA006").equals(new BigDecimal(0.00))) {
                qDto.put("OEB1009", 0.16);
            } else {
                qDto.put("OEB1009", mmrx_tPO.getBigDecimal("GWEA006").divide(new BigDecimal(100), 4, RoundingMode.HALF_UP));//根据税种mmrx007抓税率
            }

            // 税前金额
            if (mmrx_tPO.getBigDecimal("TDI01") == null) {
                qDto.put("OEB14", 0);//mmrx014-mmrx016
            } else {
                qDto.put("OEB14", mmrx_tPO.getBigDecimal("TDI01").setScale(2, RoundingMode.HALF_UP));//gwcs039-gwcs041
            }
            // 含税金额
            if (mmrx_tPO.getBigDecimal("MMRX014") == null) {
                qDto.put("OEB14T", 0);
            } else {
                qDto.put("OEB14T", mmrx_tPO.getBigDecimal("MMRX014").setScale(2, RoundingMode.HALF_UP));
            }

//                    qDto.put("TD040", 0); // 件装
//                    qDto.put("TD041", 0); // 件数
//                    qDto.put("TD042", 0); // 批发价
//                    qDto.put("TD043", 0); // 零售价
//                    qDto.put("TD046", 0); // 原始客户
//                    qDto.put("TD020", mmrx_tPO.getString("MMRX031")); // 备注
//                    qDto.put("TD021", "N"); // 审核码

            count++;
            this.baseMapper.insertOebFile(qDto);

            MmrxT mmrxT = new MmrxT();
            mmrxT.setMMRX029(infoDto.getString("dd01"));
            mmrxT.setMMRXACTI("Z");
            UpdateWrapper<MmrxT> mmrxTUpdateWrapper = new UpdateWrapper<>();
            mmrxTUpdateWrapper.eq("MMRXDOCNO", mmrx_tPO.getString("MMRXDOCNO"));
            mmrxTUpdateWrapper.eq("MMRXSEQ", mmrx_tPO.getString("MMRXSEQ"));
            mmrxT.update(mmrxTUpdateWrapper);
        }
    }


    /**
     * 维修费用收入还原订单(gwei025)
     */
    public Dto restore025(Dto inDto) {
        Dto outDto = Dtos.newDto();
        ShiroUser shiroUser = ShiroKit.getUser();
        String[] selectionIds = inDto.getString("datas").split(",");
        List list = Arrays.asList(selectionIds);
        Set set = new HashSet(list);
        String[] rid = (String[]) set.toArray(new String[0]);
        int rows = 0;
        for (String data : rid) {
            inDto.put("MMRXDOCNO", data);
            //根据单号查询维修费用结算表数据
            List<Dto> mmrxData = this.mmrxTService.getMmrxAllData(inDto);
            String dbname = mmrxData.get(0).getString("MMRXPLANT");

            inDto.put("OEA12", data);
            inDto.put("OEACONF", "X");
            inDto.put("PLANT", dbname);
            Dto OeaInfo = this.baseMapper.getOea01(inDto);
            if (OeaInfo == null) {
                MmrxT mmrxT = new MmrxT();
                mmrxT.setMMRXACTI("Y");
                mmrxT.setMMRX029("");
                UpdateWrapper mmrxTUpdateWrapper = new UpdateWrapper();
                mmrxTUpdateWrapper.eq("MMRXSENT",shiroUser.getDBC());
                mmrxTUpdateWrapper.eq("MMRXDOCNO",data);
                mmrxT.update(mmrxTUpdateWrapper);
                outDto.put("docno", "找不到对应ERP订单");
            } else if (OeaInfo.getString("OEACONF").equals("N")) { // 未审核订单才可撤回
                Dto inDto2 = Dtos.newDto();
                inDto2.put("ERP_Link", inDto.getString("ERP_Link"));
                inDto2.put("PLANT", dbname);
                inDto2.put("OEACONF", "X"); // 将该笔订单作废掉
                inDto2.put("OEA01", OeaInfo.getString("OEA01"));
                int count = this.baseMapper.updateOeaconfByOea01(inDto2);
                if(count == 0 ) {
                    outDto.put("docno", "系统错误，ERP更新失败");
                }else {
                    MmrxT mmrxT = new MmrxT();
                    mmrxT.setMMRXACTI("Y");
                    mmrxT.setMMRX029("");
                    UpdateWrapper mmrxTUpdateWrapper = new UpdateWrapper();
                    mmrxTUpdateWrapper.eq("MMRXSENT",shiroUser.getDBC());
                    mmrxTUpdateWrapper.eq("MMRXDOCNO",data);
                    mmrxT.update(mmrxTUpdateWrapper);
                    outDto.put("docno", "操作成功");
                }
            } else if (OeaInfo.getString("OEACONF").equals("Y")) {
                outDto.put("docno", "ERP单据已经审核不能还原");
            }
            rows++;
        }
        return outDto;
    }


    /**
     * 维修费用结算转订单(gwei024)
     */
    public JSONArray transfer024(Dto inDto) {
        ShiroUser shiroUser = ShiroKit.getUser();
        String[] selectionIds = inDto.getString("datas").split(",");
        List list = Arrays.asList(selectionIds);
        JSONArray json = new JSONArray();
        Set set = new HashSet(list);
        String[] rid = (String[]) set.toArray(new String[0]);

        for (String data : rid) {
            inDto.put("MMRWDOCNO", data);
            //根据单号查询维修费用结算表数据
            List<Dto> mmrwData = this.mmrwTService.getMmrwAllData(inDto);

            //查询erp数据库
            Dto dbinfo1 = Dtos.newDto();
            dbinfo1.put("BIZ_CODE", mmrwData.get(0).getString("MMRWPLANT"));
            dbinfo1.put("ERP_Link",inDto.getString("ERP_Link"));
            Dto dbinfo2 = this.baseMapper.getAzpFile(dbinfo1);

            if (dbinfo2 == null) { //没查到目标数据库  添加失败
                JSONObject jo = new JSONObject();
                jo.put("ERPRESULT", "N");//同步结果  Y  N
                jo.put("MMRWDOCNO", mmrwData.get(0).getString("MMRWDOCNO"));//维修费用结算单号
                jo.put("ERPDOCNO", "");//erp单号
                jo.put("REASON", "目标数据库为空,添加失败");//失败原因
                json.add(jo);
                continue;
            }

            String dbname = dbinfo2.getString("AZP01").trim();


            String docno = DateUtils.getDate("yyyyMMdd")+"001";
            //按法人组织抓取单号
            Dto dhinfo = this.mmrwTService.getGwaz(mmrwData.get(0).getString("MMRWLEGAL"));
            inDto.put("INA", dhinfo.getString("GWAZ002")+'-'+DateUtils.getDate("yyyyMMdd"));
            Dto maxINA01 = this.baseMapper.getMaxINA01(inDto);
            if(maxINA01 != null){
                docno = maxINA01.getString("INA01");
            }
            docno = dhinfo.getString("GWAZ002") + '-' + docno;
            try {
                int count = 1;
                for (Dto mmrw : mmrwData) {
                    //单身信息
                    Dto qDto = Dtos.newDto();
                    qDto.put("ERP_Link", inDto.getString("ERP_Link"));
                    qDto.put("PLANT", dbname);  //目标数据库

                    qDto.put("INB01", docno);   //单据编号
                    qDto.put("INB03", BigDecimal.valueOf(count));
                    qDto.put("INB04", mmrw.getString("MMRW001"));//品号
                    qDto.put("INB05", mmrw.getString("MMRW005"));//仓库
                    qDto.put("INB06", "");//储位
                    qDto.put("INB07", "");//批号
                    qDto.put("INB08", mmrw.getString("MMRW002"));//单位
                    qDto.put("INB08_FAC", 1);//异动/库存单位的换算率
                    qDto.put("INB09", mmrw.getBigDecimal("MMRW003"));//异动数量
                    qDto.put("INB10", "N");//检验否
                    qDto.put("INB11", mmrw.getString("MMRWDOCNO"));//来源单号
                    qDto.put("INB12", "");  //参考单号
                    qDto.put("INB13", "");  //单价
                    qDto.put("INB14", "");  //金额
                    qDto.put("INB15", "");  //理由码
                    qDto.put("INB901", ""); //手册编号
                    qDto.put("INB902", mmrw.getString("MMRW002")); //单位一
                    qDto.put("INB903", 1); //单位一换算率(与库存单位)
                    qDto.put("INB904", mmrw.getBigDecimal("MMRW003")); //单位一数量
                    qDto.put("INB905", ""); //单位二
                    qDto.put("INB906", ""); //单位二换算率(与库存单位)
                    qDto.put("INB907", ""); //单位二数量
                    qDto.put("INB907", ""); //单位二数量
                    qDto.put("INB908", 0);  //年度
                    qDto.put("INB909", 0);  //月份
                    qDto.put("INB910", ""); //成本中心
                    qDto.put("INB1001", ""); //订价编号
                    qDto.put("INB1002", ""); //提案编号
                    qDto.put("INB1003", ""); //单价(非成本)
                    qDto.put("INB1004", ""); //计价单位
                    qDto.put("INB1005", ""); //计价数量
                    qDto.put("INB1006", ""); //金额
                    qDto.put("INB930", ""); //成本中心
                    qDto.put("INB911", ""); //保税受托加工订单编号
                    qDto.put("INB912", ""); //保税受托加工订单项次
                    qDto.put("INB41", ""); //专案代号
                    qDto.put("INB42", ""); //WBS编码
                    qDto.put("INB43", ""); //活动代号
                    qDto.put("INB43", ""); //活动代号
                    qDto.put("INB16", mmrw.getBigDecimal("MMRW003")); //申请数量
                    qDto.put("INB922", mmrw.getString("MMRW002")); //申请单位一
                    qDto.put("INB923", 1); //申请单位一换算率
                    qDto.put("INB924", mmrw.getBigDecimal("MMRW003")); //申请单位一数量
                    qDto.put("INB925", ""); //申请单位二
                    qDto.put("INB926", ""); //申请单位二换算率
                    qDto.put("INB927", ""); //申请单位二数量
                    qDto.put("INBPLANT", mmrw.getString("MMRWPLANT")); //所属营运中心
                    qDto.put("INBLEGAL", mmrw.getString("MMRWPLANT")); //所属营运中心
                    qDto.put("INB132", ""); //人工单价
                    qDto.put("INB133", ""); //制费一单价
                    qDto.put("INB134", ""); //加工单价
                    qDto.put("INB135", ""); //制费二单价
                    qDto.put("INB136", ""); //制费三单价
                    qDto.put("INB137", ""); //制费四单价
                    qDto.put("INB138", ""); //制费五单价
                    qDto.put("INB46", ""); //QC判定结果编码
                    qDto.put("INB47", ""); //QC判定结果项次
                    qDto.put("INB44", ""); //QC单号
                    qDto.put("INB45", ""); //QC项次
                    qDto.put("INB48", ""); //检验批号

                    this.baseMapper.insert_inb_file(qDto);

                    MmrwT mmrwT = new MmrwT();
                    mmrwT.setMMRWACTI("Z");
                    mmrwT.setMMRW013(docno);
                    mmrwT.setMMRW014(String.valueOf(count));
                    UpdateWrapper mmrwTUpdateWrapper = new UpdateWrapper();
                    mmrwTUpdateWrapper.eq("MMRWSEQ",mmrw.getBigDecimal("MMRWSEQ"));
                    mmrwTUpdateWrapper.eq("MMRWSENT",shiroUser.getDBC());
                    mmrwTUpdateWrapper.eq("MMRWDOCNO",data);
                    mmrwT.update(mmrwTUpdateWrapper);
                    count++;
                }

            } catch (Exception e) {
                JSONObject jo = new JSONObject();
                jo.put("ERPRESULT", "N");//同步结果  Y  N
                jo.put("MMRWDOCNO", mmrwData.get(0).getString("MMRWDOCNO"));//维修费用结算单号
                jo.put("ERPDOCNO", "");//erp单号
                jo.put("REASON", "添加INB表失败");//失败原因

                e.printStackTrace();

                Dto deltb = Dtos.newDto();
                deltb.put("PLANT", dbname);
                deltb.put("INB01", docno);
                deltb.put("ERP_Link", inDto.getString("ERP_Link"));
                this.baseMapper.delete_inb(deltb);

                MmrwT mmrwT = new MmrwT();
                mmrwT.setMMRWACTI("Y");
                mmrwT.setMMRW013("");
                mmrwT.setMMRW014("");
                UpdateWrapper mmrwTUpdateWrapper = new UpdateWrapper();
                mmrwTUpdateWrapper.eq("MMRWSENT",shiroUser.getDBC());
                mmrwTUpdateWrapper.eq("MMRWDOCNO",data);
                mmrwT.update(mmrwTUpdateWrapper);

                json.add(jo);
                continue;
            }

            try {
                //单头  订单信息
                Dto mmrwDto = mmrwData.get(0);
                Dto pDto = Dtos.newDto();

                pDto.put("ERP_Link", inDto.getString("ERP_Link"));
                pDto.put("PLANT", dbname);//目标数据库

                pDto.put("INA00", "1");  //单据类别
                pDto.put("INA01", docno); //单据编号
                pDto.put("INA02", mmrwDto.getString("MMRWDOCDATE")); //扣帐日期
                pDto.put("INA03", DateUtils.getDate("yyyy-MM-dd")); //输入日期
                pDto.put("INA04", ""); //部门编号
                pDto.put("INA05", "");
                pDto.put("INA06", ""); //专案编号
                pDto.put("INA07", mmrwDto.getString("MMRW015")); //备注
                pDto.put("INA08", "");
                pDto.put("INA09", "");
                pDto.put("INA10", ""); //工单编号
                pDto.put("INAPRSW", 0); //列印次数
                pDto.put("INAPOST", "N"); //过帐码
                pDto.put("INAUSER", shiroUser.getACCOUNT()); //资料所有者
                pDto.put("INAGRUP", ""); //资料所有群
                pDto.put("INADATE", DateUtils.getDate("yyyy-MM-dd"));
                pDto.put("INAMKSG", "N"); //签核否
                pDto.put("INA11", "");   //申请人
                pDto.put("INA1001", "");   //客户代号
                pDto.put("INA1003", "");   //送货客户
                pDto.put("INA1002", "");   //帐款客户
                pDto.put("INA1004", "");   //收款客户
                pDto.put("INA1005", "");   //地址码
                pDto.put("INA1006", "");   //地址-1
                pDto.put("INA1007", "");   //地址-2
                pDto.put("INA1008", "");   //地址-3
                pDto.put("INA1009", "");   //债权代码
                pDto.put("INA1010", "");   //客户所属组织
                pDto.put("INA1011", "");   //费用归属组织
                pDto.put("INA1012", "");   //客户所属通路
                pDto.put("INA1013", "");   //预计发出日
                pDto.put("INA1014", "");   //实际发出日
                pDto.put("INA1015", "");   //重量
                pDto.put("INA1016", "");   //体积
                pDto.put("INA1017", "");   //手工单号
                pDto.put("INA1018", "");   //杂发申请单号
                pDto.put("INA1019", "");   //非直营业KAB
                pDto.put("INA1020", "");   //库存异动总金额
                pDto.put("INA1021", "");   //已列印提单
                pDto.put("INA1022", "");   //导物流状况码
                pDto.put("INA1023", "");   //币别
                pDto.put("INA1024", "");   //汇率
                pDto.put("INA1025", "");   //异动类别
                pDto.put("INACONF", "N");   //确认码
                pDto.put("INASPC", "");   //SPC抛转码
                pDto.put("INA100", "");   //保税异动原因代码
                pDto.put("INA101", "");   //保税进口报单
                pDto.put("INA102", "");   //保税进口报单日期
                pDto.put("INA103", "");   //VMI发/退料单号
                pDto.put("INA12", "N");   //商品报溢
                pDto.put("INACOND", "");   //审核日期
                pDto.put("INACONT", "");   //审核时间
                pDto.put("INACONU", "");   //审核人员
                pDto.put("INAPOS", "N");   //已传POS否
                pDto.put("INAPLANT",  mmrwDto.getString("MMRWPLANT"));   //所属营运中心
                pDto.put("INALEGAL",  mmrwDto.getString("MMRWPLANT"));   //所属法人
                pDto.put("INAPORIU",  shiroUser.getACCOUNT());   //资料建立者
                pDto.put("INAPORIG",  "");   //资料建立部门
                pDto.put("INA13",  "");   //POS单号

                int row = this.baseMapper.insert_ina_file(pDto);

                String result = "N";
                if (row > 0) {
                    result = "Y";
                }

                JSONObject jo = new JSONObject();
                jo.put("ERPRESULT", result);//同步结果  Y  N
                jo.put("MMRWDOCNO", mmrwData.get(0).getString("MMRWDOCNO"));//维修费用结算单号
                jo.put("ERPDOCNO", docno);//erp单号
                jo.put("REASON", "");//失败原因
                json.add(jo);
            } catch (Exception e) {
                JSONObject jo = new JSONObject();
                jo.put("ERPRESULT", "N");//同步结果  Y  N
                jo.put("MMRWDOCNO", mmrwData.get(0).getString("MMRWDOCNO"));//维修费用结算单号
                jo.put("ERPDOCNO", docno);//erp单号
                jo.put("REASON", "添加INA表失败");//失败原因
                json.add(jo);

                e.printStackTrace();

                Dto deltb = Dtos.newDto();
                deltb.put("PLANT", dbname);
                deltb.put("INB01", docno);
                deltb.put("ERP_Link", inDto.getString("ERP_Link"));
                this.baseMapper.delete_inb(deltb);

                MmrwT mmrwT = new MmrwT();
                mmrwT.setMMRWACTI("Y");
                mmrwT.setMMRW013("");
                mmrwT.setMMRW014("");
                UpdateWrapper mmrwTUpdateWrapper = new UpdateWrapper();
                mmrwTUpdateWrapper.eq("MMRWSENT",shiroUser.getDBC());
                mmrwTUpdateWrapper.eq("MMRWDOCNO",data);
                mmrwT.update(mmrwTUpdateWrapper);

                //插入INA 失败  整张订单跳过 进行下个订单
                e.printStackTrace();
                continue;
            }
        }
        return json;
    }

    /**
     * 还原订单(gwei024)
     */
    public Dto restore024(Dto inDto) {
        Dto outDto = Dtos.newDto();
        ShiroUser shiroUser = ShiroKit.getUser();
        String[] selectionIds = inDto.getString("datas").split(",");
        List list = Arrays.asList(selectionIds);
        Set set = new HashSet(list);
        String[] rid = (String[]) set.toArray(new String[0]);
        int rows = 0;
        for (String data : rid) {
            inDto.put("MMRWDOCNO", data);

            //根据单号查询维修费用结算表数据
            List<Dto> mmrwData = this.mmrwTService.getMmrwAllData(inDto);
            //查询erp数据库
            Dto dbinfo1 = Dtos.newDto();
            dbinfo1.put("BIZ_CODE", mmrwData.get(0).getString("MMRWPLANT"));
            dbinfo1.put("ERP_Link",inDto.getString("ERP_Link"));
            Dto dbinfo2 = this.baseMapper.getAzpFile(dbinfo1);
            String dbname = dbinfo2.getString("AZP01").trim();

            inDto.put("PLANT", dbname);
            inDto.put("INA00", "1");
            inDto.put("INA01", mmrwData.get(0).getString("MMRW013"));
            Dto INAinfo = this.baseMapper.getINA(inDto);
            if (INAinfo == null) {
                MmrwT mmrwT = new MmrwT();
                mmrwT.setMMRWACTI("Y");
                mmrwT.setMMRW013("");
                mmrwT.setMMRW014("");
                UpdateWrapper mmrwTUpdateWrapper = new UpdateWrapper();
                mmrwTUpdateWrapper.eq("MMRWSENT",shiroUser.getDBC());
                mmrwTUpdateWrapper.eq("MMRWDOCNO",data);
                mmrwT.update(mmrwTUpdateWrapper);
                outDto.put("docno", "找不到对应ERP订单");
            } else if (INAinfo.getString("INAPOST").equals("N")) {
                Dto inDto2 = Dtos.newDto();
                inDto2.put("ERP_Link", inDto.getString("ERP_Link"));
                inDto2.put("PLANT", dbname);
                inDto2.put("INAPOST", "X");
                inDto2.put("INA00", "1");
                inDto2.put("INA01", INAinfo.getString("INA01"));
                this.baseMapper.updateINA(inDto2);

                MmrwT mmrwT = new MmrwT();
                mmrwT.setMMRWACTI("Y");
                mmrwT.setMMRW013("");
                mmrwT.setMMRW014("");
                UpdateWrapper mmrwTUpdateWrapper = new UpdateWrapper();
                mmrwTUpdateWrapper.eq("MMRWSENT",shiroUser.getDBC());
                mmrwTUpdateWrapper.eq("MMRWDOCNO",data);
                mmrwT.update(mmrwTUpdateWrapper);
                outDto.put("docno", "操作成功");
            } else if (INAinfo.getString("INAPOST").equals("Y")) {
                outDto.put("docno", "ERP单据已经审核不能还原");
            }
            rows++;
        }
        return outDto;
    }

    /**
     * 正式订单转订单(gwai710)
     */
    public JSONArray transfer710(Dto inDto){
        JSONArray json = new JSONArray();
        Date date = new Date();
        ShiroUser shiroUser = ShiroKit.getUser();
        String[] selectionIds = inDto.getString("datas").split(",");
        List list = Arrays.asList(selectionIds);
        Set set = new HashSet(list);
        String[] rid = (String[]) set.toArray(new String[0]);
        int rows = 0;
        for (String data : rid) {
            Dto qDto = Dtos.newDto();
            qDto.put("gwcsdocno", data);
            qDto.put("ent", shiroUser.getDBC());
            qDto.put("lang", LangUtils.getLang(shiroUser.getLANG()));
            //根据GWCSDOCNO获取GWCS032税种 GWCS117返利类型 GWCSPLANT所属ERP营运中心
            List<Dto> pList = this.gwcsTService.listGwcs032(qDto);
            Boolean transFlag = true;
            for (int t = 0; t < pList.size(); t++) {
                List<Dto> gwcs_tPOs = this.gwcsTService.listGwcsInfo(qDto);//根据GWCSDOCNO获取订单信息
                List<Dto> gwcsz_tPOs = this.gwcsTService.listGwcszInfo(qDto);//根据GWCSDOCNO获取赠品信息



                qDto.put("gwak001", gwcs_tPOs.get(0).getString("GWAK001"));
                Dto gwakDto = Dtos.newDto();
                Dto adrDto = Dtos.newDto();
                try {
                    gwakDto = this.gwakTService.getGwakData(qDto);
                } catch (Exception e) {
                    JSONObject jo = new JSONObject();
                    jo.put("ERPRESULT", "N");//同步结果  Y  N
                    jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                    jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003_KH"));//客户名称
                    jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                    jo.put("REMARK", "getGwakData：" + e.getMessage());
                    jo.put("GWCS045", "");//订单号
                    json.add(jo);
                    continue;
                }
                try {
                    adrDto = this.gwcsTService.getAddress(qDto);
                } catch (Exception e) {
                    JSONObject jo = new JSONObject();
                    jo.put("ERPRESULT", "N");//同步结果  Y  N
                    jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                    jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003_KH"));//客户名称
                    jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                    jo.put("REMARK", "getAddress：" + e.getMessage());
                    jo.put("GWCS045", "");//订单号
                    json.add(jo);
                    continue;
                }
                Dto tcDto = Dtos.newDto();
                tcDto.put("PLANT", gwcs_tPOs.get(0).getString("GWCSPLANT"));
                tcDto.put("OEA01", DateUtils.formatDate(date, DateUtils.PATTERN_yyyyMMdd));
                tcDto.put("ERP_Link", inDto.getString("ERP_Link"));
                String dd01 = this.baseMapper.getMaxOea01(tcDto);
                if (dd01 == null) {
                    dd01 = DateUtils.formatDate(date, DateUtils.PATTERN_yyyyMMdd) + "001";
                }
                //根据订单上的法人组织字段gwcsmlegal 从sys_org表找到ERP组织 根据ERP组织=MB001，从ERP的数据库DSCSYS的表DSCMB中抓到MB003的值。
                //Dto dbinfo1 = this.gwcsTService.getDBinfo1(shiroUser.getDBC(), gwcs_tPOs.get(0).getString("GWCSMLEGAL"));// 先查询biz_code_  因数据库排序问题  分成两个语句查询
                //Dto dbinfo2 = this.gwcsTService.getDBinfo2(dbinfo1.getString("BIZ_CODE"));
                // String dbname = dbinfo2.getString("MB001").trim();

                String dbname = gwcs_tPOs.get(0).getString("GWCSPLANT");


                //dbname = "NJNT";
                if (dbname.isEmpty()) { //没查到目标数据库  添加失败
                    JSONObject jo = new JSONObject();
                    jo.put("ERPRESULT", "N");//同步结果  Y  N
                    jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                    jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003"));//客户名称
                    jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                    jo.put("REMARK", "订单没有归属法人");
                    jo.put("GWCS045", "");//ERP订单号
                    json.add(jo);
                    continue;
                }

                //根据本地订单号OEA12=GWCSDOCNO判断订单是否已经抛过  都是整单抛转 不需要项次
                Dto inDto1 = Dtos.newDto();
                inDto1.put("PLANT", dbname);
                inDto1.put("OEA12", gwcs_tPOs.get(0).getString("GWCSDOCNO"));
                inDto1.put("ERP_Link", inDto.getString("ERP_Link"));
                Dto checkinfo = this.baseMapper.getOea12(inDto1);
                if (checkinfo != null) {
                    JSONObject jo = new JSONObject();
                    jo.put("ERPRESULT", "N");//同步结果  Y  N
                    jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                    jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003_KH"));//客户名称
                    jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                    jo.put("REMARK", "订单已经抛转");
                    jo.put("GWCS045", "");//ERP订单号
                    json.add(jo);
                    //该订单已经抛转过  同步失败  跳过进行下个订单
                    continue;
                }

                //判断客户编号在ERP中是否存在 不存在就新增一笔数据
                Dto inDto2 = Dtos.newDto();
                Dto outDto2 = Dtos.newDto();
                inDto2.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));
                inDto2.put("PLANT", dbname);
                inDto2.put("ERP_Link", inDto.getString("ERP_Link"));
                outDto2 = this.baseMapper.selectByGwak001(inDto2);
                if (outDto2 == null) {
                    String syncresult = this.SyncERP(gwcs_tPOs.get(0).getString("GWAK001"),inDto.getString("ERP_Link"), dbname);
                    if (syncresult.equals("N")) {
                        JSONObject jo = new JSONObject();
                        jo.put("ERPRESULT", "N");//同步结果  Y  N
                        jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                        jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003_KH"));//客户名称
                        jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                        jo.put("REMARK", "同步客户资料失败");
                        jo.put("GWCS045", "");//ERP订单号
                        json.add(jo);
                        //同步客户资料失败  整张订单跳过 进行下个订单
                        continue;
                    }
                }

                try {
                    List<Dto> MD = new ArrayList<>();
                    for (Dto gwcs_tPO : gwcs_tPOs) {
                        //单身信息
                        Dto inDto3 = Dtos.newDto();

                        inDto3.put("ERP_Link",inDto.getString("ERP_Link"));
                        inDto3.put("PLANT", dbname);//目标数据库
                        //按法人组织抓取单别
                        Dto dhinfo = gwcsTService.getGwaz(inDto.getString("ENT"), gwcs_tPOs.get(0).getString("GWCSMLEGAL"));
                        String TC001=dhinfo.getString("GWAZ002");//单别
                        String OEA01=TC001+"-"+dd01;
                        inDto3.put("OEB01", OEA01);
                        inDto3.put("OEB03", gwcs_tPO.getString("GWCSSEQ"));
                        inDto3.put("OEB04", gwcs_tPO.getString("GWCS001"));//取CRM中购物车的品号(需要判断是否在ERP中是否存在?）
                        inDto3.put("OEB05", gwcs_tPO.getString("GWABL003"));//单位

                        inDto3.put("OEB06", gwcs_tPO.getString("GWAML003")+" "+gwcs_tPO.getString("GWAML004"));//品名 规格
                        inDto3.put("OEB09", gwcs_tPO.getString("GWCS113"));//仓库
                        inDto3.put("OEB12", gwcs_tPO.getString("GWCS003"));//数量
                        inDto3.put("OEB13", gwcs_tPO.getBigDecimal("GWCS115"));//单价
                        inDto3.put("OEB24", 0);//已出货数量
                        if (gwcs_tPO.getBigDecimal("GWCS034") == null) {
                            gwcs_tPO.put("GWCS034", 1);//汇率没有默认给1
                        }
                        //本币税后金额
                        inDto3.put("OEB14T", gwcs_tPO.getBigDecimal("GWCS005").multiply(gwcs_tPO.getBigDecimal("GWCS034")));
                        if (gwcs_tPOs.get(0).getDate("GWCS016") != null) {
                            //预交货日
                            inDto3.put("OEB15", DateUtils.formatDate(gwcs_tPOs.get(0).getDate("GWCS016"), "yyyyMMdd"));
                        }
                        //TD038：原币税前金额
                        if (gwcs_tPO.getBigDecimal("TD038") == null) {
//                            inDto3.put("TD038", "");//(GWCS040/(GWEA006/100)
                            inDto3.put("OEB14", "");
                        } else {
//                            inDto3.put("TD038", gwcs_tPO.getBigDecimal("GWCS005").subtract(gwcs_tPO.getBigDecimal("GWCS040").setScale(2, RoundingMode.HALF_UP)));//gwcs005-gwcs040
                            //本币税前金额
                            inDto3.put("OEB14", (gwcs_tPO.getBigDecimal("GWCS005").subtract(gwcs_tPO.getBigDecimal("GWCS040").setScale(2, RoundingMode.HALF_UP))).multiply(gwcs_tPO.getBigDecimal("GWCS034")));
                        }
                        //GWCS040:原币税额
//                        if (gwcs_tPO.getBigDecimal("GWCS040") == null) {
//                            inDto3.put("TD039", "");
//                        } else {
//                            inDto3.put("TD039", gwcs_tPO.getBigDecimal("GWCS040").setScale(2, RoundingMode.HALF_UP));
//                            //本币税额
//                            inDto3.put("TDI02", (gwcs_tPO.getBigDecimal("GWCS040").setScale(2, RoundingMode.HALF_UP)).multiply(gwcs_tPO.getBigDecimal("GWCS034")));
//                        }

                        inDto3.put("OEB70", "N");//结案否
//                        inDto3.put("OEB1006", gwcs_tPO.getBigDecimal("GWCS035"));//折扣率

//                        inDto3.put("OEB03","");//项次
                        inDto3.put("OEB71","");//客户订单项次
//                        inDto3.put("OEB04","");//产品编号
//                        inDto3.put("OEB06","");//品名
                        inDto3.put("OEB11","");//客户产品编号
                        inDto3.put("OEB1001","");//原因码
                        inDto3.put("OEB906","");//检验
                        inDto3.put("OEB092","");//批号
//                        inDto3.put("OEB15","");//约定交货日
                        inDto3.put("OEB72","");//产品结构指定有效日期
                        inDto3.put("OEB913","");//单位二参考单位
                        inDto3.put("OEB915",0);//单位二参考单位数量
                        inDto3.put("OEB910","");//单位一销售单位
                        inDto3.put("OEB912",0);//单位一销售数量
                        inDto3.put("OEB23",0);//已交数量
//                        inDto3.put("OEB24",0);//已交数量
                        inDto3.put("OEB25",0);//已交数量
                        inDto3.put("OEB26",0);//已交数量
                        inDto3.put("OEB27","");//请购单号/采购单号
//                        inDto3.put("OEB28",0);//已转请购单/已转采购单
//                        inDto3.put("OEB13","");//单价
//                        inDto3.put("OEB14","");//税前金额
//                        inDto3.put("OEB14T","");//税后金额
                        inDto3.put("OEB41","");//项目编号
                        inDto3.put("OEB42","");//WBS编码
                        inDto3.put("OEB43","");//活动编号
                        inDto3.put("OEB908","");//手册编号
                        inDto3.put("OEB22","");//版本
                        inDto3.put("OEB19","");//备置
//                        inDto3.put("OEB70","");//结案
                        inDto3.put("OEB16","");//排定交货日

                        if (gwcs_tPO.getBigDecimal("GWEA006") == null || gwcs_tPO.getBigDecimal("GWEA006").equals(new BigDecimal(0.00))) {
                            inDto3.put("OEB1009", 0.16);//税率
                        } else {
                            inDto3.put("OEB1009", gwcs_tPO.getBigDecimal("GWEA006").divide(new BigDecimal(100), 4, RoundingMode.HALF_UP));//根据税种gwcs032抓税率
                        }

                        inDto3.put("OEB05_FAC",0);//换算率
                        inDto3.put("OEB37",0);//基础单价
                        inDto3.put("OEB44"," ");//经营方式
                        inDto3.put("OEB47",0);//分摊折价
                        inDto3.put("OEB48",1);//出货方式

                        inDto3.put("OEBPLANT", gwcs_tPO.getString("GWCSPLANT"));
                        inDto3.put("OEBLEGAL", gwcs_tPO.getString("GWCSPLANT"));

                        try {
                            this.baseMapper.insertOebFile(inDto3);
                        } catch (Exception e) {
                            transFlag = false;
                            this.baseMapper.deleteOeb(inDto3);
                            JSONObject jo = new JSONObject();
                            jo.put("ERPRESULT", "N");//同步结果  Y  N
                            jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                            jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003_KH"));//客户名称
                            jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                            jo.put("GWCS045", "");//订单号
                            jo.put("REMARK", "insertOeb：" + e.getMessage());
                            json.add(jo);
                            //插入OEB_FILE 失败  整张订单跳过 进行下个订单
                            break;
                        }
                        //更新
                        inDto3.put("gwcs102", gwcs_tPO.getString("GWCSSEQ"));
                        inDto3.put("gwcs045", OEA01);
                        inDto3.put("gwcsacti", "Z");
                        //更新条件
                        inDto3.put("ent", shiroUser.getDBC());
                        inDto3.put("gwcsdocno",gwcs_tPO.getString("GWCSDOCNO"));
                        inDto3.put("gwcsseq", gwcs_tPO.getString("GWCSSEQ"));


                        try {
                            this.gwcsTService.update(inDto3);
                        } catch (Exception e) {
                            transFlag = false;
                            JSONObject jo = new JSONObject();
                            jo.put("ERPRESULT", "N");//同步结果  Y  N
                            jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                            jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003_KH"));//客户名称
                            jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                            jo.put("GWCS045", "");//订单号
                            jo.put("REMARK", "update：" + e.getMessage());
                            json.add(jo);
                            //插入OEB_FILE 失败  整张订单跳过 进行下个订单
                            break;
                        }
                    }
                    if (transFlag) {
                        //把赠品写入ERP单身
                        Integer seq = 9999;
                        for (Dto gwcsz_tPO : gwcsz_tPOs) {
                            //单身信息
                            Dto inDto4 = Dtos.newDto();

                            inDto4.put("ERP_Link", inDto.getString("ERP_Link"));//目标数据库
                            inDto4.put("PLANT", dbname);//目标数据库
                            //按法人组织抓取单别
                            Dto dhinfo = gwcsTService.getGwaz(inDto.getString("ENT"), gwcs_tPOs.get(0).getString("GWCSMLEGAL"));
                            String TC001=dhinfo.getString("GWAZ002");//单别
                            String OEA01=TC001+"-"+dd01;
                            inDto4.put("OEB01", OEA01);
                            inDto4.put("OEB03", seq);
                            inDto4.put("OEB04", gwcsz_tPO.getString("GWCSZ004"));//取CRM中订单赠品的品号(需要判断是否在ERP中是否存在?）
                            inDto4.put("OEB05", gwcs_tPOs.get(0).getString("GWABL003")); //单位
                            inDto4.put("OEB06", gwcsz_tPO.getString("GWAML003")+" "+gwcsz_tPO.getString("GWAML004"));//品名
                            inDto4.put("OEB09", gwcs_tPOs.get(0).getString("GWCS113"));//仓库
                            inDto4.put("OEB12", gwcsz_tPO.getBigDecimal("GWCSZ005"));//数量
                            inDto4.put("OEB13", 0);//单价
                            inDto4.put("OEB14", 0);//税前金额（赠品金额为0）
                            inDto4.put("OEB14T", 0);//税后金额（赠品金额为0）
                            inDto4.put("OEB24", 0);//已出货数量
                            if (gwcs_tPOs.get(0).getDate("GWCS016") != null) {
                                //预计交货日
                                inDto4.put("OEB15", DateUtils.formatDate(gwcs_tPOs.get(0).getDate("GWCS016"), "yyyyMMdd"));
                            }

                            inDto4.put("OEB70", "N");//结案否
//                            inDto4.put("OEB1006","" );//折扣率

//                        inDto4.put("OEB03","");//项次
                            inDto4.put("OEB71","");//客户订单项次
//                        inDto4.put("OEB04","");//产品编号
//                        inDto4.put("OEB06","");//品名
                            inDto4.put("OEB11","");//客户产品编号
                            inDto4.put("OEB1001","");//原因码
                            inDto4.put("OEB906","");//检验
                            inDto4.put("OEB092","");//批号
//                        inDto4.put("OEB15","");//约定交货日
//                            inDto4.put("OEB72","");//产品结构指定有效日期
                            inDto4.put("OEB913","");//单位二参考单位
                            inDto4.put("OEB915",0);//单位二参考单位数量
                            inDto4.put("OEB910","");//单位一销售单位
                            inDto4.put("OEB912",0);//单位一销售数量
                            inDto4.put("OEB23",0);//
//                            inDto4.put("OEB24",0);//已交数量
                            inDto4.put("OEB25",0);
                            inDto4.put("OEB26",0);
                            inDto4.put("OEB27","");//请购单号/采购单号
//                            inDto4.put("OEB28",0);//已转请购单/已转采购单
//                        inDto4.put("OEB13","");//单价
//                        inDto4.put("OEB14","");//税前金额
//                        inDto4.put("OEB14T","");//税后金额
                            inDto4.put("OEB41","");//项目编号
                            inDto4.put("OEB42","");//WBS编码
                            inDto4.put("OEB43","");//活动编号
                            inDto4.put("OEB908","");//手册编号
                            inDto4.put("OEB22","");//版本
                            inDto4.put("OEB19","");//备置
//                        inDto4.put("OEB70","");//结案
//                            inDto4.put("OEB16","");//排定交货日

                            inDto4.put("OEB05_FAC",0);//换算率
                            inDto4.put("OEB37",0);//基础单价
                            inDto4.put("OEB44"," ");//经营方式
                            inDto4.put("OEB47",0);//分摊折价
                            inDto4.put("OEB48",1);//出货方式

                            inDto4.put("OEBPLANT", gwcs_tPOs.get(0).getString("GWCSPLANT"));
                            inDto4.put("OEBLEGAL", gwcs_tPOs.get(0).getString("GWCSPLANT"));
                            try {
                                this.baseMapper.insertOebFile(inDto4);
                            } catch (Exception e) {
                                transFlag = false;
                                this.baseMapper.deleteOeb(inDto4);
                                JSONObject jo = new JSONObject();
                                jo.put("ERPRESULT", "N");//同步结果  Y  N
                                jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                                jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003_KH"));//客户名称
                                jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                                jo.put("GWCS045", "");//订单号
                                jo.put("REMARK", "insertOeb：" + e.getMessage());
                                json.add(jo);
                                //插入OEB_FILE 失败  整张订单跳过 进行下个订单
                                break;
                            }

                            inDto4.put("gwcszdocno", gwcsz_tPO.getString("GWCSZDOCNO"));
                            inDto4.put("gwcszent", gwcsz_tPO.getString("GWCSZENT"));
                            inDto4.put("gwcsz003", gwcsz_tPO.getString("GWCSZ003"));
                            inDto4.put("gwcszseq", seq);
                            seq--;
                            try {
                                this.gwcsTService.updateGWCSZ(inDto4);
                            } catch (Exception e) {
                                transFlag = false;
                                JSONObject jo = new JSONObject();
                                jo.put("ERPRESULT", "N");//同步结果  Y  N
                                jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                                jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003_KH"));//客户名称
                                jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                                jo.put("GWCS045", "");//订单号
                                jo.put("REMARK", "updateGWCSZ：" + e.getMessage());
                                json.add(jo);
                                //插入OEB_FILE 失败  整张订单跳过 进行下个订单
                                break;
                            }

                        }
                    }

                } catch (Exception e) {
                    transFlag = false;
                    JSONObject jo = new JSONObject();
                    jo.put("ERPRESULT", "N");//同步结果  Y  N
                    jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                    jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003_KH"));//客户名称
                    jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                    jo.put("GWCS045", "");//订单号
                    jo.put("REMARK", "失败：" + e.getMessage());
                    json.add(jo);
                    //插入OEB_FILE 失败  整张订单跳过 进行下个订单
                    continue;
                }

                //单头  订单信息
                Dto inDto5 = Dtos.newDto();

                inDto5.put("ERP_Link",inDto.getString("ERP_Link"));
                inDto5.put("PLANT", dbname);//目标数据库
                inDto5.put("OEA00","1");
                //按法人组织抓取单别
                Dto dhinfo = gwcsTService.getGwaz(inDto.getString("ENT"), gwcs_tPOs.get(0).getString("GWCSMLEGAL"));
                String TC001=dhinfo.getString("GWAZ002");//单别
                String OEA01=TC001+"-"+dd01;
                inDto5.put("OEA01", OEA01);//单号
                inDto5.put("OEA02", DateUtils.getDate("yyyyMMdd"));//单据日期
                inDto5.put("OEA03", gwcs_tPOs.get(0).getString("GWCS010"));//客户编号
                inDto5.put("OEA12", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//本地订单号
                inDto5.put("OEA11", "M");//订单来源
//                inDto5.put("OEA14", gwcs_tPOs.get(0).getString("GWCS014"));//人员编号
//                inDto3.put("OEA15", gwcs_tPOs.get(0).getString(""));//部门编号

                inDto5.put("OEA23", gwcs_tPOs.get(0).getString("GWCS006"));//交易币别
                if (gwcs_tPOs.get(0).getBigDecimal("GWCS034") == null) {
                    gwcs_tPOs.get(0).put("GWCS034", 1);//汇率没有默认给1
                }
                inDto5.put("OEA24", gwcs_tPOs.get(0).getBigDecimal("GWCS034"));//汇率
                inDto5.put("OEA21", "1");//税种

                inDto5.put("OEA34", 0);//佣金比例/佣金金额
                inDto5.put("OEACONF", "N");//审核码
                inDto5.put("OEAPRSW", 0);//列印次数
                //几个需要求遍历订单求和的数据
                BigDecimal sum_TC029 = new BigDecimal(0);//订单总金额
                BigDecimal sum_TC030 = new BigDecimal(0);//订单总税额
                for (Dto gwcs_tPO : gwcs_tPOs) {
                    if (gwcs_tPO.getBigDecimal("GWCS005") != null) {
                        sum_TC029 = sum_TC029.add(gwcs_tPO.getBigDecimal("GWCS005"));
                        sum_TC029 = sum_TC029.setScale(2, RoundingMode.HALF_UP);
                    }
                    if (gwcs_tPO.getBigDecimal("GWCS040") != null) {
                        sum_TC030 = sum_TC030.add(gwcs_tPO.getBigDecimal("GWCS040"));
                        sum_TC030 = sum_TC030.setScale(2, RoundingMode.HALF_UP);
                    }
                }
                inDto5.put("OEA1008", sum_TC029);//sum（gwcs005）
                inDto5.put("OEA61", sum_TC030);//sum（gwcs040） 订单总未税金额
                inDto5.put("OEA02", DateUtils.getDate("yyyyMMdd"));//单据日期
                inDto5.put("OEACONU", gwcs_tPOs.get(0).getString("GWCS014_BIZCODE"));//审核人
                if (gwcs_tPOs.get(0).getBigDecimal("GWEA006") == null || gwcs_tPOs.get(0).getBigDecimal("GWEA006").equals(new BigDecimal(0.00))) {
                    inDto5.put("OEA211", 0.16);
                } else {
                    inDto5.put("OEA211", gwcs_tPOs.get(0).getBigDecimal("GWEA006").divide(new BigDecimal(100), 4, RoundingMode.HALF_UP));//根据税种gwcs032抓税率
                }
                inDto5.put("OEA31","001");//价格条件编号
                inDto5.put("OEA32", gwakDto.getString("GWAK060"));//客户资料对应付款条件编号

                inDto5.put("OEA21", gwcs_tPOs.get(0).getString("GWAK007"));//按经销商gwcs011去客户档gwak抓税号gwak007
                if (adrDto != null) {
                    inDto5.put("OEA89", adrDto.getString("GWAL020"));//电话
                }

//                inDto5.put("OEA61",0);
                inDto5.put("OEA09",0);//允许超交率
                inDto5.put("OEA62",0);//已出货未税金额
                inDto5.put("OEA63",0);//被结案未税金额
                inDto5.put("OEA85"," ");//结算方式
                inDto5.put("OEAPLANT", gwcs_tPOs.get(0).getString("GWCSPLANT"));
                inDto5.put("OEALEGAL", gwcs_tPOs.get(0).getString("GWCSPLANT"));

                qDto.put("gwcs045", OEA01);

                int row = 0;
                if (transFlag) {
                    try {
                        row = this.baseMapper.insertOeaFile(inDto5);
                    } catch (Exception e) {
                        JSONObject jo = new JSONObject();
                        jo.put("ERPRESULT", "N");//同步结果  Y  N
                        jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                        jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003_KH"));//客户名称
                        jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                        jo.put("GWCS045", "");//订单号
                        jo.put("REMARK", "insertOea：" + e.getMessage());
                        json.add(jo);
                        continue;
                    }
                }

                String result = "N";
                if (row > 0) {
                    result = "Y";
                }
                JSONObject jo = new JSONObject();
                jo.put("ERPRESULT", result);//同步结果  Y  N
                jo.put("GWAK001", gwcs_tPOs.get(0).getString("GWAK001"));//客户编号
                jo.put("GWAKL003", gwcs_tPOs.get(0).getString("GWAKL003_KH"));//客户名称
                jo.put("GWCSDOCNO", gwcs_tPOs.get(0).getString("GWCSDOCNO"));//订单号
                if (result == "Y") {
                    jo.put("GWCS045", OEA01);//ERP订单号
                    jo.put("REMARK", "");
                    json.add(jo);
                }
            }
            rows++;
        }
        return json;
    }

    /**
     * ERP订单还原(gwai710)
     */
    public Dto restore710(Dto qDto){
        Dto outDto = Dtos.newDto();
        ShiroUser shiroUser = ShiroKit.getUser();
        String[] selectionIds = qDto.getString("datas").split(",");
        List list = Arrays.asList(selectionIds);
        Set set = new HashSet(list);
        String[] rid = (String[]) set.toArray(new String[0]);
        int rows = 0;
        String err_message = "";
        for (String data : rid) {
            Dto inDto = qDto;
            inDto.put("GWCSDOCNO", data);
            List<Dto> gwcs = this.gwcsTService.getGWCS045(inDto);//查询正式订单表中ERP订单号GWCS045
            Boolean flag1 = this.gwcsTService.getGwdfCount(inDto);//返回订单变更表中是否存在变更
            Boolean flag2 = false;
            for (Dto tDto : gwcs) {
                tDto.put("ERP_Link",qDto.getString("ERP_Link"));
                Dto result = this.baseMapper.getOgbCount(tDto);//查询ERP出货表中含有该订单的出货单记录数
                if (result.getBigDecimal("COUNT").compareTo(new BigDecimal(0)) == 1) {//1 greater than
                    flag2 = true;
                    break;
                }
            }
            if (flag1 || flag2) {
                err_message = data + ',' + err_message;
            }
        }
        err_message = StringUtils.substringBeforeLast(err_message, ",");
        if (!("").equals(err_message)) {
            outDto.setAppCode(300);
            outDto.put("docno","订单" + err_message + "已做过出货单或变更单，无法撤销！");
        }
        for (String data : rid) {
            Dto inDto = Dtos.newDto();
            inDto.put("gwcsdocno", data);
            inDto.put("ent", shiroUser.getDBC());
            List<Dto> pList = gwcsTService.listGwcs032(inDto);
            for (int t = 0; t < pList.size(); t++) {
                List<Dto> gwcs_tPOs = this.gwcsTService.listGwcsInfo(inDto);
                String dbname = gwcs_tPOs.get(0).getString("GWCSPLANT");
                inDto.put("OEA12", data);
                inDto.put("OEACONF", "X");
                inDto.put("PLANT", dbname);
                inDto.put("ERP_Link", qDto.getString("ERP_Link"));
                Dto OEAinfo = this.baseMapper.getOea01(inDto);
                if (OEAinfo == null) {
                    GwcsT gwcsT = new GwcsT();
                    gwcsT.setGWCSACTI("Y");
                    gwcsT.setGWCSENT(shiroUser.getDBC());
                    gwcsT.setGWCSDOCNO(gwcs_tPOs.get(0).getString("GWCSDOCNO"));
                    gwcsT.setGWCS045(" ");
                    gwcsTService.updateGwcs(gwcsT);
                    outDto.setAppCode(500);
                    outDto.put("docno", "找不到对应ERP订单");
                } else {
                    Dto inDto2 = Dtos.newDto();
                    inDto2.put("PLANT", dbname);
                    inDto2.put("OEACONF", "X");
                    inDto2.put("OEA12", data);
                    inDto2.put("ERP_Link", qDto.getString("ERP_Link"));
                    baseMapper.updateOeaconf(inDto2);

                    GwcsT gwcsT = new GwcsT();
                    gwcsT.setGWCSACTI("Y");
                    gwcsT.setGWCSENT(shiroUser.getDBC());
                    gwcsT.setGWCSDOCNO(gwcs_tPOs.get(0).getString("GWCSDOCNO"));
                    gwcsT.setGWCS045(" ");
                    gwcsTService.updateGwcs(gwcsT);
                    outDto.setAppCode(200);
                    outDto.put("docno", "操作成功");
                } /*else if (COPTCinfo.getString("TC027").equals("Y")) {
                    outDto.put("docno", "ERP订单已经审核不能还原");
                }*/
            }
            rows++;
        }
        return outDto;
    }

    /**
     * 结算方式
     * @param dto
     * @return
     */
    public Dto getOea85(Dto dto) {
        Dto maDtos = this.baseMapper.getOea85(dto);
        return maDtos;
    }

    /**
     * 发货、退货金额
     * @param dto
     * @return
     */
    public Dto getSumTgi(Dto dto) {
        Dto outDto = Dtos.newDto();
        Dto tgDtos = this.baseMapper.getSumTg(dto);  // 发货金额
        Dto tiDtos = this.baseMapper.getSumTi(dto);  // 退货金额
        outDto.put("TG_SUM",tgDtos.getBigDecimal("TG_SUM"));
        outDto.put("TI_SUM",tiDtos.getBigDecimal("TI_SUM"));
        return outDto;
    }

    /**
     * 回款金额
     * @param dto
     * @return
     */
    public Dto getSumTk(Dto dto) {
        Dto tkDtos = this.baseMapper.getSumTk(dto);
        return tkDtos;
    }

    /**
     * 逾期回款
     * @param dto
     * @return
     */
    public Dto getYQHK(Dto dto) {
        Dto outDto = Dtos.newDto();
        String DOCDATE_START = dto.getString("DOCDATE_START");
        String DOCDATE_END = dto.getString("DOCDATE_END");
        String DATE_START = DOCDATE_START.substring(0,6);
        String DATE_END = DOCDATE_END.substring(0,6);
        dto.put("DATE_START",DATE_START);
        dto.put("DATE_END",DATE_END);
        Dto ycyeDtos = this.baseMapper.getSumQc(dto);//月初余额
        Dto bqzdlsskDtos = this.baseMapper.getSumTb(dto);//本期针对历史的收款
        Dto bqzqwhxDtos = this.baseMapper.getSumTkWHX(dto);//本期帐期未核销收款
        BigDecimal YQHK = ycyeDtos.getBigDecimal("QC0211").subtract(bqzdlsskDtos.getBigDecimal("TB043"))
                .subtract(bqzqwhxDtos.getBigDecimal("TK032"));
        outDto.put("YQHK",YQHK);
        return outDto;
    }

    /**
     * 无返利发货
     * @param dto
     * @return
     */
    public Dto getWFLFH(Dto dto) {
        Dto wflfhDtos = this.baseMapper.getSumWFLFH(dto);
        return wflfhDtos;
    }

    /**
     * 铺货
     * @param dto
     * @return
     */
    public Dto getPH(Dto dto) {
        Dto outDto = Dtos.newDto();
        Dto phfhDtos = this.baseMapper.getSumPHFH(dto);
        Dto phhkDtos = this.baseMapper.getSumPHHK(dto);
        Dto phwflDtos = this.baseMapper.getSumPHWFL(dto);
        outDto.put("PHFH",phfhDtos.getBigDecimal("PHFH"));
        outDto.put("PHHK",phhkDtos.getBigDecimal("PHHK"));
        outDto.put("PHWFL",phwflDtos.getBigDecimal("PHWFL"));
        return outDto;
    }

    /**
     * 审核订单变更单(gwai770)
     */
    public Dto checkGwai770(Dto inDto){
        Dto outDto = Dtos.newDto();
        outDto.put("code", 200);
        List<GwdfT> gwdfTList = this.gwdfTService.getGwdfData(inDto);
        List<Dto> change = new ArrayList();
        int count_1 = 0;
        int count_2 = 0;
        for (GwdfT gwdfT : gwdfTList) {
            Dto queryDto = Dtos.newDto();
            queryDto.put("MB001", gwdfT.getGWDFMLEGAL());
            inDto.put("MB001", gwdfT.getGWDFMLEGAL());
            queryDto.put("OGB31", gwdfT.getGWDF003());
            queryDto.put("OGB32", gwdfT.getGWDF004());
            queryDto.put("ERP_Link", inDto.getString("ERP_Link"));
            Dto sumOgb16 = this.baseMapper.getOgb16Sum(queryDto);
            if (sumOgb16 == null) {
                sumOgb16 = Dtos.newDto();
                sumOgb16.put("OGB16_SUM", 0);
            }
            if (sumOgb16.getBigDecimal("OGB16_SUM").compareTo(gwdfT.getGWDF015()) == 0) {
                if (gwdfT.getGWDF015().compareTo(gwdfT.getGWDF014()) < 1) {
                    continue;
                } else {
                    count_2++;
                }
            } else {
                Dto changeDto = Dtos.newDto();
                changeDto.put("GWDF003", gwdfT.getGWDF003());
                changeDto.put("GWDF004", gwdfT.getGWDF004());
                changeDto.put("GWDF015", sumOgb16.getBigDecimal("OGB16_SUM"));
                change.add(changeDto);
                count_1++;
            }
        }
        if (count_1 > 0) {
            outDto.put("code", 300);
            outDto.put("change_list", change);
        } else if (count_2 > 0) {
            outDto.put("code", 400);
        } else {//修改分销订单及ERP订单数据
            for (GwdfT gwdfT : gwdfTList) {
                if (gwdfT.getGWDF004() == null || ("").equals(gwdfT.getGWDF004())) {
                    //查询ERP数据，获取该单号最大项次
                    Dto QDto = Dtos.newDto();
                    QDto.put("ERP_Link",inDto.getString("ERP_Link"));
                    QDto.put("MB001",gwdfT.getGWDFMLEGAL());
                    QDto.put("OEB01",gwdfT.getGWDF003());
                    Dto maxOeb03 = this.baseMapper.getMaxOeb03(QDto);
                    Dto gwamQ = Dtos.newDto();
                    gwamQ.put("ENT", inDto.getString("ENT"));
                    gwamQ.put("LANG", inDto.getString("LANG"));
                    gwamQ.put("GWAM001", gwdfT.getGWDF011());
                    Dto gwam = this.gwdfTService.getGwam(gwamQ);
                    GwcsT gwcsTQ = this.gwdfTService.getMaxGwcsseq(gwdfT.getGWDF001());
                    try {
                        this.gwdfTService.addGwcs(gwcsTQ, gwdfT);
                        this.insertCOPTD(maxOeb03, gwdfT, gwam, gwcsTQ.getGWCSSEQ().add(new BigDecimal(1)),inDto.getString("ERP_Link"));
                    } catch (Exception e) {
                        BigDecimal OEB03 = maxOeb03.getBigDecimal("OEB03_MAX").add(new BigDecimal(1));
                        DecimalFormat df = new DecimalFormat("0000");
                        String eb003 = df.format(OEB03);
                        Dto delOeb = Dtos.newDto();
                        delOeb.put("PLANT", gwdfT.getGWDFMLEGAL());
                        delOeb.put("OEB01", gwdfT.getGWDF003());//订单号
                        delOeb.put("OEB03", eb003);//订单项次
                        delOeb.put("ERP_Link", inDto.getString("ERP_Link"));
                        this.gwdfTService.delGwcs(gwcsTQ);
                        this.baseMapper.deleteOeb(delOeb);
                        //this.baseMapper.updateCOPTCDEL(delCoptc);
                        e.printStackTrace();
                        outDto.put("code", 500);
                        outDto.put("message", "订单变更单确认失败！" + e.getMessage());
                    }
                }
                //修改ERP数据
                Dto OEB = Dtos.newDto();
                OEB.put("ERP_Link", inDto.getString("ERP_Link"));
                OEB.put("MB001", gwdfT.getGWDFMLEGAL());
                OEB.put("OEB12", gwdfT.getGWDF014());//订单数量
                OEB.put("OEB09", gwdfT.getGWDF023());//仓库
                //COPTD.put("TD011", gwdfT.getGWDF017());//价格
                OEB.put("OEB14T", gwdfT.getGWDF026());//金额
                OEB.put("OEB14", gwdfT.getGWDF026().subtract(gwdfT.getGWDF029()));//税前金额
                OEB.put("OEB01", gwdfT.getGWDF003());//订单号
                OEB.put("OEB03", gwdfT.getGWDF004());//订单项次
                OEB.put("OEB1006", gwdfT.getGWDF036());//折扣率

                //修改ERP数据
                /*Dto COPTD = Dtos.newDto();
                COPTD.put("ERP_Link", inDto.getString("ERP_Link"));
                COPTD.put("MB001", gwdfT.getGWDFMLEGAL());
                COPTD.put("TC038", gwdfT.getGWDF031());//备注
                COPTD.put("UDF12", gwdfT.getGWDF007());//返利类型
                switch (gwdfT.getGWDF007()) {
                    case "1":
                        COPTD.put("UDF12", "现款有返利");
                        break;
                    case "2":
                        COPTD.put("UDF12", "现款无返利");
                        break;
                    case "3":
                        COPTD.put("UDF12", "帐期有返利");
                        break;
                    case "4":
                        COPTD.put("UDF12", "帐期无返利");
                        break;
                    case "5":
                        COPTD.put("UDF12", "铺货有返利");
                        break;
                    case "6":
                        COPTD.put("UDF12", "铺货无返利");
                        break;
                }
                COPTD.put("TD008", gwdfT.getGWDF014());//订单数量
                COPTD.put("TD007", gwdfT.getGWDF023());//仓库
                //COPTD.put("TD011", gwdfT.getGWDF017());//价格
                COPTD.put("TD012", gwdfT.getGWDF026());//金额
                COPTD.put("TD039", gwdfT.getGWDF029());//税额
                COPTD.put("TD038", gwdfT.getGWDF026().subtract(gwdfT.getGWDF029()));//税前金额
                COPTD.put("TDI01", COPTD.getBigDecimal("TD038").multiply(gwdfT.getGWDF024()));//本币税前金额
                COPTD.put("TDI02", gwdfT.getGWDF029().multiply(gwdfT.getGWDF024()));//本币税前金额
                COPTD.put("TDI03", gwdfT.getGWDF026().multiply(gwdfT.getGWDF024()));//本币金额
                COPTD.put("TD002", gwdfT.getGWDF003());//订单号
                COPTD.put("TD003", gwdfT.getGWDF004());//订单项次
                COPTD.put("TD026", gwdfT.getGWDF036());//折扣率*/

                //更新分销订单数据
                GwcsT gwcsT = new GwcsT();
                //gwcsT.setGWCS050(gwdfT.getGWDF031());//备注
                //gwcsT.setGWCS117(gwdfT.getGWDF007());//返利类型
                gwcsT.setGWCS003(gwdfT.getGWDF014());//订单数量
                gwcsT.setGWCS113(gwdfT.getGWDF023());//仓库
                gwcsT.setGWCS004(gwdfT.getGWDF017());//价格
                gwcsT.setGWCS005(gwdfT.getGWDF026());//金额
                gwcsT.setGWCS040(gwdfT.getGWDF029());//税额
                gwcsT.setGWCS112(gwdfT.getGWDF021());//仓库类型
                gwcsT.setGWCS035(gwdfT.getGWDF036());//折扣
                gwcsT.setGWCSDOCNO(gwdfT.getGWDF001());//订单号
                gwcsT.setGWCSSEQ(gwdfT.getGWDF005());//订单项次
                gwcsT.setGWCSENT(gwdfT.getGWDFENT());

                GwcsT gwcsTNew = new GwcsT();
                gwcsTNew.setGWCS117(gwdfT.getGWDF007());//返利类型
                gwcsTNew.setGWCSDOCNO(gwdfT.getGWDF001());//订单号
                gwcsTNew.setGWCS050(gwdfT.getGWDF031());//备注
                gwcsTNew.setGWCSENT(gwdfT.getGWDFENT());

                //更新赠品
                GwcszT gwcszT = new GwcszT();
                gwcszT.setGWCSZENT(gwdfT.getGWDFENT());
                gwcszT.setGWCSZDOCNO(gwdfT.getGWDF001());
                gwcszT.setGWCSZSEQ(gwdfT.getGWDF004());//erp变更单项序
                gwcszT.setGWCSZ005(gwdfT.getGWDF014());//价格
                try {
                    this.gwdfTService.updateGWCS_GWCSZ(gwcsT, gwcszT, gwcsTNew);
                    this.baseMapper.updateOeb(OEB);
                    //this.baseMapper.updateCOPTCSum(COPTD);
                } catch (Exception e) {
                    e.printStackTrace();
                    outDto.put("code", 500);
                    outDto.put("message", "订单变更单确认失败！" + e.getMessage());
                }

            }
            this.gwdfTService.updateGwdf(inDto);
        }
        return outDto;
    }

    public void insertCOPTD(Dto maxOEB03, GwdfT gwdfT, Dto gwam, BigDecimal gwcsseq, String ERP_Link) {
        BigDecimal OEB03 = maxOEB03.getBigDecimal("OEB03_MAX").add(new BigDecimal(1));
        DecimalFormat df = new DecimalFormat("0000");
        String eb003 = df.format(OEB03);

        Dto oeb = Dtos.newDto();
        oeb.put("ERP_Link",ERP_Link);
        oeb.put("PLANT", gwdfT.getGWDFMLEGAL());//目标数据库

        oeb.put("OEB01", gwdfT.getGWDF003());
        oeb.put("OEB03", eb003);
        oeb.put("OEB04", gwdfT.getGWDF011());//取CRM中购物车的品号(需要判断是否在ERP中是否存在?）
        oeb.put("OEB05", gwdfT.getGWDF012());//单位

        oeb.put("OEB06", gwam != null ? gwam.getString("GWAML003")+" " + gwam.getString("GWAML004"): "");//品名 规格
        oeb.put("OEB09", gwdfT.getGWDF023());//仓库
        oeb.put("OEB12", gwdfT.getGWDF014());//数量
        oeb.put("OEB13", gwdfT.getGWDF016());//单价
        oeb.put("OEB24", 0);//已出货数量

        //本币税后金额
        oeb.put("OEB14T", gwdfT.getGWDF027());
        oeb.put("OEB14", gwdfT.getGWDF027());//未税金额
        oeb.put("OEB14", gwdfT.getGWDF029().multiply(gwdfT.getGWDF024()));//本币税前金额
        /*if (gwcs_tPOs.get(0).getDate("GWCS016") != null) {
            //预交货日
            oeb.put("OEB15", DateUtils.formatDate(gwcs_tPOs.get(0).getDate("GWCS016"), "yyyyMMdd"));
        }*/

        oeb.put("OEB70", "N");//结案否
        oeb.put("OEB71","");//客户订单项次
        oeb.put("OEB11","");//客户产品编号
        oeb.put("OEB1001","");//原因码
        oeb.put("OEB906","");//检验
        oeb.put("OEB092","");//批号
        oeb.put("OEB72","");//产品结构指定有效日期
        oeb.put("OEB913","");//单位二参考单位
        oeb.put("OEB915",0);//单位二参考单位数量
        oeb.put("OEB910","");//单位一销售单位
        oeb.put("OEB912",0);//单位一销售数量
        oeb.put("OEB23",0);//已交数量
        //oeb.put("OEB24",0);//已交数量
        oeb.put("OEB25",0);//已交数量
        oeb.put("OEB26",0);//已交数量
        oeb.put("OEB27","");//请购单号/采购单号
        //inDto3.put("OEB28",0);//已转请购单/已转采购单
        oeb.put("OEB41","");//项目编号
        oeb.put("OEB42","");//WBS编码
        oeb.put("OEB43","");//活动编号
        oeb.put("OEB908","");//手册编号
        oeb.put("OEB22","");//版本
        oeb.put("OEB19","");//备置
        //oeb.put("OEB70","");//结案
        oeb.put("OEB16","");//排定交货日
        oeb.put("OEB1009", gwdfT.getGWDF010());//税率

        oeb.put("OEB05_FAC",0);//换算率
        oeb.put("OEB37",0);//基础单价
        oeb.put("OEB44"," ");//经营方式
        oeb.put("OEB47",0);//分摊折价
        oeb.put("OEB48",1);//出货方式

        oeb.put("OEBPLANT", gwdfT.getGWDFMLEGAL());
        oeb.put("OEBLEGAL", gwdfT.getGWDFMLEGAL());

        this.baseMapper.insertOebFile(oeb);
        //this.baseMapper.updateCOPTCSum(COPTD);
    }

    public JSONArray insertErpGwak(Dto inDto) {
        String[] gwak001s = inDto.getString("gwak001_list").split(",");
        String[] MB001s = inDto.getString("mb001_list").split(",");
        ShiroUser shiroUser = ShiroKit.getUser();
        // 数据库主机
        String ERP_Link = inDto.getString("ERP_Link");
        JSONArray json = new JSONArray();
        for (String gwak001 : gwak001s) {
            //一条客户资料数据
            Dto gwakDto = Dtos.newDto();
            gwakDto.put("ent", shiroUser.getDBC());
            gwakDto.put("lang", LangUtils.getLang(shiroUser.getLANG()));
            gwakDto.put("gwak001", gwak001);
            Dto info = gwakTService.getGwakData(gwakDto);
            String dbname = info.getString("GWCSPLANT");
            for (String MB001 : MB001s) {
                //是否写入成功
                String result = "N";
                if (MB001 != null) {
                    //判断客户编号在ERP中是否存在 不存在就新增一笔客户数据
                    Dto inDto2 = Dtos.newDto();
                    inDto2.put("GWAK001", gwak001);
                    inDto2.put("PLANT", dbname);
                    inDto2.put("ERP_Link", inDto.getString("ERP_Link"));
                    Dto outDto2 = this.baseMapper.selectByGwak001(inDto2);
                    int count = 0;
                    //  客户不存在，将客户资料同步到ERP
                    if (outDto2 == null || outDto2.getString("OCC01").isEmpty()) {
                        try {
                            count = this.gwakData(inDto2.getString("OCC01"), ERP_Link, dbname, "add");
                        } catch (Exception e) {
                            JSONObject jo = new JSONObject();
                            jo.put("SYNCRESULT", result);//同步结果  Y  N syncresult
                            jo.put("GWAK001", info.getString("GWAK001"));//客户编号
                            jo.put("GWAKL003", info.getString("GWAKL003"));//客户名称
                            jo.put("REMARK", e.getMessage());
                            if (MB001 != null) {
                                jo.put("MB002", MB001);//erp公司
                            } else {
                                jo.put("MB002", "");//erp公司
                            }
                            json.add(jo);
                            continue;
                        }
                    } else {
                        try {
                            count = this.gwakData(inDto2.getString("OCC01"), ERP_Link, dbname, "update");
                        } catch (Exception e) {
                            JSONObject jo = new JSONObject();
                            jo.put("SYNCRESULT", result);//同步结果  Y  N syncresult
                            jo.put("GWAK001", info.getString("GWAK001"));//客户编号
                            jo.put("GWAKL003", info.getString("GWAKL003"));//客户名称
                            jo.put("REMARK", e.getMessage());
                            if (MB001 != null) {
                                jo.put("MB002", MB001);//erp公司
                            } else {
                                jo.put("MB002", "");//erp公司
                            }
                            json.add(jo);
                            continue;
                        }
                    }
                    if (count > 0) {
                        result = "Y";
                    }
                }
                JSONObject jo = new JSONObject();
                jo.put("SYNCRESULT", result);//同步结果  Y  N syncresult
                jo.put("GWAK001", info.getString("GWAK001"));//客户编号
                jo.put("GWAKL003", info.getString("GWAKL003"));//客户名称
                jo.put("REMARK", "");
                if (MB001 != null) {
                    jo.put("MB002", MB001);//erp公司
                } else {
                    jo.put("MB002", "");//erp公司
                }
                json.add(jo);
            }
        }
        return json;
    }

    public int gwakData(String gwak001, String ERP_Link, String dbname, String type){
        ShiroUser shiroUser = ShiroKit.getUser();
        int i=0;
        //获取gwak001对应的客户资料数据
        Dto qDto = Dtos.newDto();
        qDto.put("ent", shiroUser.getDBC());
        qDto.put("lang", LangUtils.getLang(shiroUser.getLANG()));
        qDto.put("gwak001", gwak001);
        Dto info = this.gwakTService.getGwakData(qDto);

        //获取目标数据库
        Dto outDto = Dtos.newDto();
        outDto.put("PLANT", info.getString("GWAKPLANT"));
        outDto.put("OCC01", info.getString("GWAK001"));  // 客户编号
        outDto.put("OCC02", info.getString("GWAKL003")); // 客户简称
        outDto.put("OCC18", info.getString("GWAKL004")); // 公司全名
        outDto.put("OCC28", info.getString("GWAK050"));  // 负责人
        outDto.put("OCC29", info.getString("GWAK031"));  // 业务联络人
        outDto.put("OCC261", info.getString("GWAK030")); //电话1
        //outDto.put("MA007", info.getString("GWAK050"));//电话2
        //outDto.put("MA010", info.getString("GWAK007"));
        if (info.getString("GWAK051").equals("NULL")) { // 注册资金
            outDto.put("OCC13", "");
        } else {
            outDto.put("OCC13", info.getBigDecimal("GWAK051"));
        }
        if (info.getString("GWAK052").equals("NULL")) {  // 年营业额
            outDto.put("OCC14", "");
        } else {
            outDto.put("OCC14", info.getBigDecimal("GWAK052"));
        }
        outDto.put("OCC42", info.getString("GWAK008"));  // 币别
        outDto.put("OCC20", info.getString("GWAK020"));  // 区域（洲）
        outDto.put("OCC21", info.getString("GWAK021"));  // 国别
        outDto.put("OCC22", info.getString("GWAK024"));  // 地区（如北京）
        outDto.put("OCC1009", info.getString("GWAK023"));  // 省
        outDto.put("OCC1010", info.getString("GWAK024"));  // 市
        outDto.put("OCC1011", info.getString("GWAK025"));  // 县
        outDto.put("OCC1012", info.getString("GWAK028"));  // 注册地址

        if (!(info.getString("GWAL018_fp").isEmpty())) {
            outDto.put("OCC231", info.getString("GWAL018_fp"));//gwal018 where gwal003='I' 发票地址
        }
        if (!(info.getString("GWAL018_sh").isEmpty())) {
            outDto.put("OCC241", info.getString("GWAL018_sh"));//gwal018 where gwal003='D' 送货地址
        }
        outDto.put("OCC62", "N"); // 信用额度控制
        outDto.put("OCC63", 0);   // 信用额度
        outDto.put("OCC64", 0);   // 信用额度容许超出比率
        outDto.put("OCC44", "2"); // 计价方式
        outDto.put("OCC1028", 0);   // 折扣率
        outDto.put("OCC08", "A"); // 发票种类 (发票别？)
        outDto.put("OCC41", "1"); //税种
        outDto.put("OCC53", 0);  // 佣金比率
        outDto.put("MA087", "2");  // 税额
        outDto.put("OCC246"," ");
        outDto.put("OCCPOS","1");
        outDto.put("OCC73"," ");
        outDto.put("OCC71","1");
        outDto.put("OCC72", 0);    // 订金比率

        //抓税率
        if (info.getString("GWEA006") == null || info.getString("GWAK004").isEmpty()) {
            outDto.put("MA101", 0.16);
        } else {
            outDto.put("MA101", info.getBigDecimal("GWEA006"));
        }

        Dto orgDto = this.gwcsTService.getSysOrg(shiroUser.getORG_ID());
        outDto.put("COMPANY", info.getString("GWAKPLANT"));
        outDto.put("FLAG", 1);

        //将客户资料插入指定ERP数据库
        outDto.put("ERP_Link", ERP_Link);
        outDto.put("PLANT", dbname);
        //将客户资料插入指定ERP数据库
        if("add".equals(type)) {
            i = this.baseMapper.insertOccFile(outDto);
        }else {
            i = this.baseMapper.updateOccFile(outDto);
        }
        return i;
    }
}
